#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
//int main()
//{
//    close(1);
//    int fd = open("proc.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    printf("hello printf\n");
//    printf("%d\n", fd);
//    return 0;
//}

//int main()
//{
//    close(1);
//    int fd = open("proc.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    printf("hello printf\n");//stdout的目标已经变成proc.txt了，所以不会'\n'不会触发行刷新
//    printf("%d\n", fd);
//    close(fd);// 与上一个代码运行现象对比
//    return 0;
//}

//int main()
//{
//    close(1);
//    int fd = open("proc.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    printf("hello printf\n");
//    printf("%d\n", fd);
//    fflush(stdout);//立即刷新语言层缓冲区
//    close(fd);
//    return 0;
//}


//int main()
//{
//    close(1);
//    int fd = open("proc.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//    printf("hello printf\n");
//    printf("%d\n", fd);
//    const char* buf = "hello buf\n";
//    write(fd, buf, strlen(buf));//直接写入文件内核缓冲区
//    close(fd);
//    return 0;
//}

//命令行分别输入./proc 和./proc > proc.txt后观察现象
//int main()
//{
//    //库函数调用
//    printf("hello printf\n");
//    fprintf(stdout, "hello fprintf\n");
//    const char* s = "hello fwrite\n";
//    fwrite(s, strlen(s), 1, stdout);
//
//    //系统调用
//    const char* ss = "hello write\n";
//    write(1, ss, strlen(ss));
//    return 0;
//}

//命令行分别输入./proc 和./proc > proc.txt后观察现象
int main()
{
    //库函数调用
    printf("hello printf\n");
    fprintf(stdout, "hello fprintf\n");
    const char* s = "hello fwrite\n";
    fwrite(s, strlen(s), 1, stdout);

    //系统调用
    const char* ss = "hello write\n";
    write(1, ss, strlen(ss));

    fork();//创建子进程
    return 0;
}
